home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / dalla rivista / amiga.free / diropus4.12b_gpl / config / screen_colors.c < prev    next >
C/C++ Source or Header  |  2000-01-27  |  10KB  |  381 lines

  1. /*
  2.  
  3. Directory Opus 4
  4. Original GPL release version 4.12
  5. Copyright 1993-2000 Jonathan Potter
  6.  
  7. This program is free software; you can redistribute it and/or
  8. modify it under the terms of the GNU General Public License
  9. as published by the Free Software Foundation; either version 2
  10. of the License, or (at your option) any later version.
  11.  
  12. This program is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with this program; if not, write to the Free Software
  19. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20.  
  21. All users of Directory Opus 4 (including versions distributed
  22. under the GPL) are entitled to upgrade to the latest version of
  23. Directory Opus version 5 at a reduced price. Please see
  24. http://www.gpsoft.com.au for more information.
  25.  
  26. The release of Directory Opus 4 under the GPL in NO WAY affects
  27. the existing commercial status of Directory Opus 5.
  28.  
  29. */
  30.  
  31. #include "config.h"
  32.  
  33. void showcolourvals(pen,prop)
  34. int pen,prop;
  35. {
  36.     int a,c;
  37.     ULONG b,d,cbuf[3];
  38.  
  39.     SetAPen(rp,pen);
  40.     RectFill(rp,
  41.         x_off+252,y_off+34,
  42.         x_off+287,y_off+45);
  43.     if (version2>=OSVER_39) {
  44.         GetRGB32(vp->ColorMap,pen,1,cbuf);
  45.         for (a=0;a<3;a++) {
  46.             scalecol(&cbuf[a]);
  47.             lsprintf(palette_buf[a],"%ld",cbuf[a]);
  48.             if (prop) FixSliderPot(Window,&palettegads[a],cbuf[a],1<<bpg,1,1);
  49.             ShowSlider(Window,&palettegads[a]);
  50.             RefreshGList(&palettegads[a+3],Window,NULL,1);
  51.         }
  52.     }
  53.     else {
  54.         b=GetRGB4(vp->ColorMap,pen);
  55.         for (a=0,c=8;a<3;a++,c-=4) {
  56.             d=(b>>c)&0xf;
  57.             lsprintf(palette_buf[a],"%ld",d);
  58.             if (prop) FixSliderPot(Window,&palettegads[a],d,1<<bpg,1,1);
  59.             RefreshStrGad(&palettegads[a+3],Window);
  60.         }
  61.     }
  62. }
  63.  
  64. void updatecolourvals(pen,show)
  65. int pen,show;
  66. {
  67.     ULONG new[3],old[3];
  68.     int a,b,ok=0;
  69.  
  70.     if (show==-1) {
  71.         for (a=0;a<3;a++) {
  72.             new[a]=atoi(palette_buf[a]);
  73.             if (new[a]<0) new[a]=0;
  74.             else if (new[a]>=(1<<bpg)) new[a]=(1<<bpg)-1;
  75.             if (version2>=OSVER_39) scalecolup(&new[a]);
  76.         }
  77.         ok=1;    
  78.     }
  79.     else {
  80.         if (version2>=OSVER_39) {
  81.             GetRGB32(vp->ColorMap,pen,1,old);
  82.             for (a=0;a<3;a++) {
  83.                 scalecol(&old[a]);
  84.                 if ((new[a]=GetSliderPos(&palettegads[a],1<<bpg,1))!=old[a]) ok=1;
  85.                 scalecolup(&new[a]);
  86.             }
  87.         }
  88.         else {
  89.             for (a=0,b=8;a<3;a++,b-=4)
  90.                 old[a]=(GetRGB4(vp->ColorMap,pen)>>b)&0xf;
  91.             for (a=0;a<3;a++)
  92.                 if ((new[a]=GetSliderPos(&palettegads[a],1<<bpg,1))!=old[a]) ok=1;
  93.         }
  94.     }
  95.     if (ok) {
  96.         if (version2>=OSVER_39) SetRGB32(vp,pen,new[0],new[1],new[2]);
  97.         else SetRGB4(vp,pen,new[0],new[1],new[2]);
  98.     }
  99.     showcolourvals(pen,show);
  100.     get_palette(Screen,config->new_palette,1<<screen_depth);
  101. }
  102.  
  103. void showscreencolours(which,fg,bg,special)
  104. int which;
  105. char **fg,**bg;
  106. int special;
  107. {
  108.     int a,x,y,h;
  109.     char buf[2];
  110.  
  111.     if (which&COLOURS_3DBOXES) {
  112.         do3dbox(x_off+151,y_off+88,203,41);
  113.         do3dbox(x_off+394,y_off+88,203,41);
  114.         Do3DStringBox(rp,
  115.             x_off+153,y_off+143,
  116.             163,8,
  117.             screen_pens[config->gadgettopcol].pen,screen_pens[config->gadgetbotcol].pen);
  118.         Do3DStringBox(rp,
  119.             x_off+432,y_off+143,
  120.             163,8,
  121.             screen_pens[config->gadgettopcol].pen,screen_pens[config->gadgetbotcol].pen);
  122.         solidblock(rp,
  123.             coloursgadgets[COLBIT_3DBOXES],
  124.             x_off+162,y_off+168,
  125.             208,10,1,0,3+special);
  126.         if (fg) {
  127.             *fg=&config->gadgettopcol; *bg=&config->gadgetbotcol;
  128.         }
  129.     }        
  130.     if (which&COLOURS_STATUS) {
  131.         solidblock(rp,
  132.             coloursgadgets[COLBIT_STATUS],
  133.             x_off+151,y_off+68,
  134.             446,8,config->statusfg,config->statusbg,3+special);
  135.         if (fg) {
  136.             *fg=&config->statusfg; *bg=&config->statusbg;
  137.         }
  138.     }
  139.     if (which&COLOURS_SELDISKNAME) {
  140.         solidblock(rp,
  141.             coloursgadgets[COLBIT_SELDISKNAME],
  142.             x_off+151,y_off+78,
  143.             221,8,config->disknameselfg,config->disknameselbg,1+special);
  144.         if (fg) {
  145.             *fg=&config->disknameselfg; *bg=&config->disknameselbg;
  146.         }
  147.     }
  148.     if (which&COLOURS_DISKNAME) {
  149.         solidblock(rp,
  150.             coloursgadgets[COLBIT_DISKNAME],
  151.             x_off+376,y_off+78,
  152.             221,8,config->disknamefg,config->disknamebg,1+special);
  153.         if (fg) {
  154.             *fg=&config->disknamefg; *bg=&config->disknamebg;
  155.         }
  156.     }
  157.     if (!special) {
  158.         if (which&COLOURS_SELDIRECTORY) {
  159.             solidblock(rp,
  160.                 coloursgadgets[COLBIT_SELDIRECTORY],
  161.                 x_off+151,y_off+88,
  162.                 203,8,config->dirsselfg,config->dirsselbg,0);
  163.             if (fg) {
  164.                 *fg=&config->dirsselfg; *bg=&config->dirsselbg;
  165.             }
  166.         }
  167.         if (which&COLOURS_DIRECTORY) {
  168.             solidblock(rp,
  169.                 coloursgadgets[COLBIT_DIRECTORY],
  170.                 x_off+151,y_off+96,
  171.                 203,8,config->dirsfg,config->dirsbg,0);
  172.             if (fg) {
  173.                 *fg=&config->dirsfg; *bg=&config->dirsbg;
  174.             }
  175.         }
  176.         if (which&COLOURS_SELFILE) {
  177.             solidblock(rp,
  178.                 coloursgadgets[COLBIT_SELFILE],
  179.                 x_off+151,y_off+104,
  180.                 203,8,config->filesselfg,config->filesselbg,0);
  181.             if (fg) {
  182.                 *fg=&config->filesselfg; *bg=&config->filesselbg;
  183.             }
  184.         }
  185.         if (which&COLOURS_FILE) {
  186.             solidblock(rp,
  187.                 coloursgadgets[COLBIT_FILE],
  188.                 x_off+151,y_off+112,
  189.                 203,8,config->filesfg,config->filesbg,0);
  190.             solidblock(rp,
  191.                 NULL,
  192.                 x_off+151,y_off+120,
  193.                 203,9,config->filesfg,config->filesbg,0);
  194.             solidblock(rp,
  195.                 NULL,
  196.                 x_off+394,y_off+88,
  197.                 203,41,config->filesfg,config->filesbg,0);
  198.             if (fg) {
  199.                 *fg=&config->filesfg; *bg=&config->filesbg;
  200.             }
  201.         }
  202.     }
  203.     if (which&COLOURS_SLIDERS) {
  204.         do3dbox(x_off+151,y_off+131,167,9);
  205.         do3dbox(x_off+430,y_off+131,167,9);
  206.         do3dbox(x_off+358,y_off+88,14,23);
  207.         do3dbox(x_off+376,y_off+88,14,23);
  208.         if (!special) {
  209.             SetAPen(rp,screen_pens[config->sliderbgcol].pen);
  210.             RectFill(rp,
  211.                 x_off+151,y_off+131,
  212.                 x_off+317,y_off+139);
  213.             RectFill(rp,
  214.                 x_off+430,y_off+131,
  215.                 x_off+596,y_off+139);
  216.  
  217.             RectFill(rp,
  218.                 x_off+358,y_off+88,
  219.                 x_off+371,y_off+110);
  220.             RectFill(rp,
  221.                 x_off+376,y_off+88,
  222.                 x_off+389,y_off+110);
  223.  
  224.             SetAPen(rp,screen_pens[config->slidercol].pen);
  225.             RectFill(rp,
  226.                 x_off+153,y_off+132,
  227.                 x_off+259,y_off+138);
  228.             RectFill(rp,
  229.                 x_off+432,y_off+132,
  230.                 x_off+540,y_off+138);
  231.  
  232.             RectFill(rp,
  233.                 x_off+360,y_off+89,
  234.                 x_off+369,y_off+102);
  235.             RectFill(rp,
  236.                 x_off+378,y_off+89,
  237.                 x_off+387,y_off+102);
  238.         }
  239.         if (fg) {
  240.             *fg=&config->slidercol; *bg=&config->sliderbgcol;
  241.         }
  242.     }
  243.     if (which&COLOURS_ARROWS) {
  244.         x=x_off+322; y=y_off+131;
  245.         h=9;
  246.         for (a=0;a<4;a++) {
  247.             do3dbox(x,y,14,h);
  248.             do3dbox(x+18,y,14,h);
  249.             DoArrow(rp,x,y,14,h,
  250.                 screen_pens[config->arrowfg].pen,screen_pens[config->arrowbg].pen,3);
  251.             DoArrow(rp,x+18,y,14,h,
  252.                 screen_pens[config->arrowfg].pen,screen_pens[config->arrowbg].pen,2);
  253.  
  254.             if (a==1) {
  255.                 x=x_off+322;
  256.                 y+=h+2;
  257.                 ++h;
  258.             }
  259.             else x+=72;
  260.         }
  261.  
  262.         for (a=0;a<2;a++) {
  263.             do3dbox(x_off+358,y_off+113+(a*9),14,7);
  264.             do3dbox(x_off+376,y_off+113+(a*9),14,7);
  265.             if (!special) {
  266.                 DoArrow(rp,
  267.                     x_off+358,y_off+113+(a*9),
  268.                     14,7,
  269.                     screen_pens[config->arrowfg].pen,screen_pens[config->arrowbg].pen,a);
  270.                 DoArrow(rp,
  271.                     x_off+376,y_off+113+(a*9),
  272.                     14,7,
  273.                     screen_pens[config->arrowfg].pen,screen_pens[config->arrowbg].pen,a);
  274.             }
  275.         }
  276.         if (fg) {
  277.             *fg=&config->arrowfg; *bg=&config->arrowbg;
  278.         }
  279.     }
  280.     if (which&COLOURS_TINYGADS) {
  281.         buf[1]=0;
  282.         buf[0]=cfg_string[STR_COLOURS_TINY_GADS][0];
  283.         solidblock(rp,
  284.             buf,
  285.             x_off+358,y_off+131,
  286.             14,9,config->littlegadfg,config->littlegadbg,3+special);
  287.         buf[0]=cfg_string[STR_COLOURS_TINY_GADS][1];
  288.         solidblock(rp,
  289.             buf,
  290.             x_off+376,y_off+131,
  291.             14,9,config->littlegadfg,config->littlegadbg,3+special);
  292.         buf[0]=cfg_string[STR_COLOURS_TINY_GADS][2];
  293.         solidblock(rp,
  294.             buf,
  295.             x_off+358,y_off+142,
  296.             14,10,config->littlegadfg,config->littlegadbg,3+special);
  297.         buf[0]=cfg_string[STR_COLOURS_TINY_GADS][3];
  298.         solidblock(rp,
  299.             buf,
  300.             x_off+376,y_off+142,
  301.             14,10,config->littlegadfg,config->littlegadbg,3+special);
  302.  
  303.         for (a=0;a<6;a++) {
  304.             buf[0]=cfg_string[STR_COLOURS_TINY_GADS][4+a];
  305.             solidblock(rp,
  306.                 buf,
  307.                 x_off+493+(a*18),y_off+154,
  308.                 14,8,config->littlegadfg,config->littlegadbg,3+special);
  309.         }
  310.         if (fg) {
  311.             *fg=&config->littlegadfg; *bg=&config->littlegadbg;
  312.         }
  313.     }
  314.     if (which&COLOURS_CLOCK) {
  315.         solidblock(rp,
  316.             coloursgadgets[COLBIT_CLOCK],
  317.             x_off+151,y_off+154,
  318.             338,8,config->clockfg,config->clockbg,3+special);
  319.         if (fg) {
  320.             *fg=&config->clockfg; *bg=&config->clockbg;
  321.         }
  322.     }
  323.     if (which&COLOURS_REQUESTER) {
  324.         solidblock(rp,
  325.             coloursgadgets[COLBIT_REQUESTER],
  326.             x_off+378,y_off+168,
  327.             208,10,config->requestfg,config->requestbg,3+special);
  328.         if (fg) {
  329.             *fg=&config->requestfg; *bg=&config->requestbg;
  330.         }
  331.     }
  332.     if (which&COLOURS_STRINGS) {
  333.         solidblock(rp,
  334.             cfg_string[STR_COLOR_PATHNAME],
  335.             x_off+153,y_off+143,
  336.             163,8,version2?config->stringfgcol:1,version2?config->stringbgcol:0,0);
  337.         if (fg) {
  338.             *fg=&config->stringfgcol; *bg=&config->stringbgcol;
  339.         }
  340.     }
  341.     if (which&COLOURS_SELSTRINGS) {
  342.         solidblock(rp,
  343.             cfg_string[STR_COLOR_SELPATHNAME],
  344.             x_off+432,y_off+143,
  345.             163,8,version2?config->stringselfgcol:1,version2?config->stringselbgcol:0,0);
  346.         if (fg) {
  347.             *fg=&config->stringselfgcol; *bg=&config->stringselbgcol;
  348.         }
  349.     }
  350.     SetAPen(rp,screen_pens[1].pen);
  351.     SetBPen(rp,screen_pens[0].pen);
  352. }
  353.  
  354. void solidblock(r,txt,x,y,w,h,fg,bg,bord)
  355. struct RastPort *r;
  356. char *txt;
  357. int x,y,w,h,fg,bg,bord;
  358. {
  359.     if (bord&1)
  360.         Do3DBox(r,x,y,w,h,screen_pens[config->gadgettopcol].pen,screen_pens[config->gadgetbotcol].pen);
  361.     if (!(bord&4)) {
  362.         SetAPen(r,screen_pens[bg].pen);
  363.         RectFill(r,x,y,x+w-1,y+h-1);
  364.         if (txt) {
  365.             SetAPen(r,screen_pens[fg].pen);
  366.             SetBPen(r,screen_pens[bg].pen);
  367.             UScoreText(r,txt,(bord&2)?x+((w-(strlen(txt)*8))/2):x,y+((h-8)/2)+6,-1);
  368.             SetBPen(rp,screen_pens[0].pen);
  369.         }
  370.     }
  371. }
  372.  
  373. void showcolourscycle(fg,bg,sel)
  374. int fg,bg,sel;
  375. {
  376.     SetAPen(rp,screen_pens[1].pen);
  377.     DoCycleGadget(&coloursgad,Window,coloursgadgets,sel);
  378.     if (sel==COLBIT_3DBOXES) showfuncob(rp,cfg_string[STR_EXAMPLE],1,0,CFG_GADGET,x_off+302,y_off+23);
  379.     else showfuncob(rp,cfg_string[STR_EXAMPLE],fg,bg,CFG_GADGET,x_off+302,y_off+23);
  380. }
  381.